package db.sqldao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

import db.DBManager;
import db.common.DBCommon;
import db.domain.Student;

/**
 * 实现学生信息的增、删、改、查操作
 * 
 * @author Administrator
 * 
 */
public class StudentSqlDao {

	/**
	 * 根据指定的查询条件，查询学生信息
	 * 
	 * @param whereSQL
	 * @return 0 或者 ...
	 */
	public ArrayList<Student> getStudent(String whereSQL) {
		Connection conn = null;
		PreparedStatement stm = null;
		String sql = "select * from t_student " + whereSQL;
		ResultSet rs = null;
		ArrayList<Student> students = new ArrayList<Student>();
		try {
			// （1）创建数据库连接
			conn = DBManager.getConnection();
			// （2）将SQL语句添加到装载器中
			stm = conn.prepareStatement(sql);
			// （3）
			// （4）执行SQL
			rs = stm.executeQuery();
			while (rs.next()) {
				Student student = new Student();
				student.setNo(rs.getInt("no"));
				student.setName(rs.getString("name"));
				student.setSex(rs.getString("sex"));
				student.setNation(rs.getString("nation"));
				student.setTelephone(rs.getString("telephone"));
				student.setBirthday(rs.getDate("birthday"));
				student.setAddress(rs.getString("address"));
				student.setHappy(rs.getString("happy"));
				student.setPhotoPath(rs.getString("photoPath"));
				student.setReume(rs.getString("resume"));
				student.setCreateTime(rs.getTimestamp("createTime"));
				student.setPassword(rs.getString("password"));
				student.setMoney(rs.getInt("money"));
				student.setLose(rs.getString("lose"));

				students.add(student);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				stm.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return students;
	}

	/**
	 * 添加学生基本信息
	 * 
	 * @param s
	 * @return 添加成功返回TRUE
	 */
	public boolean addStudent(Student s) {

		// 定义数据库连接对象
		Connection conn = null;
		// 定义执行SQL语句的装载器
		PreparedStatement stm = null;
		// 定义字符串
		String sql = "insert into t_student(name,sex,nation,telephone,birthday,address,happy,resume,password,createtime,money,lose) values (?,?,?,?,?,?,?,?,?,?,?,?)";
		try {
			// （1）创建数据库连接
			conn = DBManager.getConnection();
			// （2）将SQL语句添加到装载器中
			stm = conn.prepareStatement(sql);
			// （3）给参数进行赋值
			stm.setString(1, s.getName());// 姓名
			stm.setString(2, s.getSex());// 性别
			stm.setString(3, s.getNation());
			stm.setString(4, s.getTelephone());
			stm.setDate(5, new java.sql.Date(s.getBirthday().getTime()));// 出生日期
			stm.setString(6, s.getAddress());
			stm.setString(7, s.getHappy());
			stm.setString(8, s.getReume());
			stm.setString(9, "123456");
			Date d = DBCommon.getServerTime();
			stm.setTimestamp(10, new java.sql.Timestamp(d.getTime()));// 创建日期
			stm.setInt(11, s.getMoney());
			stm.setString(12, s.getLose());
			// （4）执行SQL
			stm.execute();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			// （5）关闭数据库的连接
			try {
				stm.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 根据用户NO，更新图片路径
	 * 
	 * @param parseInt
	 * @param string
	 */
	public void updateUserPhotoPath(int no, String photPath) {
		// 定义数据库连接对象
		Connection conn = null;
		// 定义执行SQL语句的装载器
		PreparedStatement stm = null;
		// 定义字符串
		String sql = "update t_student set photoPath=? where no=?";
		try {
			// （1）创建数据库连接
			conn = DBManager.getConnection();
			// （2）将SQL语句添加到装载器中
			stm = conn.prepareStatement(sql);
			// （3）给参数进行赋值
			stm.setString(1, photPath);// 图片路径
			stm.setInt(2, no);// 学号
			// （4）执行SQL
			stm.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// （5）关闭数据库的连接
			try {
				stm.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 修改学生信息
	 * 
	 * @param s
	 * @return
	 */
	public boolean updateStudent(Student s) {
		// 定义数据库连接对象
		Connection conn = null;
		// 定义执行SQL语句的装载器
		PreparedStatement stm = null;
		// 定义字符串
		String sql = "update t_student set name=?,sex=?,nation=?,telephone=?,birthday=?,address=?,happy=?,resume=?,money=?,lose=? where no=?";
		try {
			// （1）创建数据库连接
			conn = DBManager.getConnection();
			// （2）将SQL语句添加到装载器中
			stm = conn.prepareStatement(sql);
			// （3）给参数进行赋值
			stm.setInt(11, s.getNo());// 学号
			stm.setString(1, s.getName());// 姓名
			stm.setString(2, s.getSex());// 性别
			stm.setString(3, s.getNation());
			stm.setString(4, s.getTelephone());
			stm.setDate(5, new java.sql.Date(s.getBirthday().getTime()));// 出生日期
			stm.setString(6, s.getAddress());
			stm.setString(7, s.getHappy());
			stm.setString(8, s.getReume());
			stm.setInt(9, s.getMoney());
			stm.setString(10, s.getLose());
			// （4）执行SQL
			stm.executeUpdate();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			// （5）关闭数据库的连接
			try {
				stm.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 根据学号删除信息
	 * 
	 * @param no
	 * @return
	 */
	public boolean deleteStudent(int no) {
		// 定义数据库连接对象
		Connection conn = null;
		// 定义执行SQL语句的装载器
		PreparedStatement stm = null;
		// 定义字符串
		String sql = "delete from t_student where no=?";
		try {
			// （1）创建数据库连接
			conn = DBManager.getConnection();
			// （2）将SQL语句添加到装载器中
			stm = conn.prepareStatement(sql);
			// （3）给参数进行赋值
			stm.setInt(1, no);// 学号
			// （4）执行SQL
			stm.execute();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			// （5）关闭数据库的连接
			try {
				stm.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
